// 定义一个数值和字符串的联合类型
const newObj:{
    name:string,
    age:number
}={
    name:'小辫',
    age:18
}
console.log(newObj);

// 定义一个类型断言
let str:any = 'this is a string';
// any时没有.length的提示
let strLen = (str as string).length;
console.log(strLen);

// 定义一个 void 实现函数的无返回值
const fn:()=>void=()=>{

}
console.log(fn);

// 定义函数 必须返回一个字符串 
const fn1 :()=>string = ()=>{
    return "23456"
}
console.log(fn1);

// 定义一个 never 的函数
const never=()=>{
    let str:string="hello word"
    console.log(str);
}
never()

// 定义函数时， 分别实现参数类型、剩余参数...XXX、默认参数sex:string="男"

function arrform(name:string,age:number,sex:string="男",like?:string) {
    return `我的姓名${name},我的年龄${age},我的性别${sex},我的爱好${like}`
}
console.log(arrform('张三',18,));

function arrform1(name:string,age:number,...arr:(string|number)[]):string {
    console.log(arr);
    
    return `我的姓名${name},我的年龄${age},`
}
console.log(arrform1('张三',12,'女',18,9,3));

// 实现一个函数重载
// (不用函数的重载)
// function add(a1:number|string,a2:number|string) {
//     if (typeof a1==="number" && typeof a2==="number") {
//         return a1+a2
//     }
//     else if (typeof a1==="string" && typeof a2==="string") {
//         return a1+a2
//     }
// }
// console.log(add(10,20));
// 函数的重载：函数的名称相同，但是参数不同的几个函数，就是函数的重载
function add(num1:number,num2:number):number
function add(num1:string,num2:string):string
function add(num1:any,num2:any):any {
    if (typeof num1==="string" && typeof num2==='string') {
        return num1.length+num2.length
    }
    return num1+num2
}
// console.log(add(20,30));
console.log(add('abc',"cba"));
// 使用 es5 的方式定义一个类和es6中定义类
class Person {
    fn1=()=>{
        return console.log(999999);
        
    }
}
const newPerson=new Person
console.log(newPerson.fn1());

// 在 ts 中定义一个类并实现继承（10分）

class Student {
    readonly name:string
    constructor(name:string="小辫"){
        this.name=name
    }
    // 公有属性
    public sayHwllo(){
        console.log("hello");
        
    }
}
const my_Student=new Student()
console.log(my_Student.name);
// 实现继承
class Sub extends Student{
    saySub(){
        console.log(this.name);
        
    }
}
const my_Sub=new Sub()
console.log(my_Sub.name);





